package lxq.asia;

public class LadderLink {
    private LinkNode head;

    public LadderLink(LinkNode firstNode){
        head=new LinkNode();
        head.next=firstNode;
        firstNode.pre=head;
    }

    public boolean notEmpty(){
        return head!=null&&head.next!=null;
    }

    public void select(int order){
        if (!notEmpty()) {
            System.out.println("链表为空");
            return;
        }
        var temp=head.next;
        while (temp != null) {
            if (temp.order == order) {
                System.out.println(temp);
                return;
            }
            temp = temp.next;
        }
        System.err.printf("不存在序号为 %d 的节点\n",order);
    }
    public LinkNode getHead() {
        return head;
    }
    public void delete(int order){
        if (!notEmpty()) {
            System.out.println("链表为空");
            return;
        }
        var temp=head;
        while (temp != null) {
            if (temp.next.order == order) {
                if (temp.next.next!=null){
                    temp.next=temp.next.next;
                    temp.next.pre=temp;
                } else temp.next=null;
                System.err.printf("已删除节点序号为 %d 的数据\n",order);
                return;
            }
            temp = temp.next;
        }
        System.err.printf("不存在序号为 %d 的节点\n",order);
    }

    public void update(LinkNode node){
        if (!notEmpty()) {
            System.out.println("链表为空");
            return;
        }
        var temp=head.next;
        while (temp!=null){
            if (temp.order==node.order) {
                temp.msg=node.msg;
                System.err.printf("已修改节点序号为 %d 的数据",node.order);
                return;
            }
            temp=temp.next;
        }
        System.err.printf("不存在序号为 %d 的节点",node.order);
    }

    public static void printListFromRear(LinkNode node){
        if (node==null) return;
        printListFromRear(node.next);
        System.out.println(node);
    }

    public void insert(LinkNode node){
        if (!notEmpty()) {
            System.out.println("链表为空");
            return;
        }
        var temp=head;
        while (true){
            if (temp.next==null){
                temp.next=node;
                node.pre=temp;
                break;
            }
            if (node.order<temp.next.order) {
                node.next=temp.next;
                node.pre=temp;
                temp.next=node;
                node.next.pre=node;
                break;
            }
            if (node.order==temp.next.order){
                System.err.printf("已存在序号为 %d 的节点",node.order);
                return;
            }
            temp=temp.next;
        }
    }

    public int size(){
        if (!notEmpty()) {
            System.out.println("链表为空");
            return 0;
        }
        var size=1;
        var temp=head.next;
        while (temp.next!=null){
            size++;
            temp=temp.next;
        }
        System.out.println("这个链表有 "+size+" 个节点");
        return size;
    }
}
